import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.Socket;
import java.util.Scanner;

public class TcpEchoClint {
    private Socket socket = null;

    public TcpEchoClint(String serverIP, int port) throws IOException {
        //这个操作相当于让客户端和服务器建立 tcp 连接
        //这里连接上了，服务器的 accept 就会返回
        socket = new Socket(serverIP, port);
    }

    public void start(){
        Scanner scanner = new Scanner(System.in);
        try(InputStream inputStream = socket.getInputStream();
            OutputStream outputStream = socket.getOutputStream()){
            PrintWriter printWriter = new PrintWriter(outputStream);
            Scanner scannerFromSocket = new Scanner(inputStream);
            while(true){
                // 1. 从键盘上读取用户输入的内容
                System.out.print("->");
                String request = scanner.next();
                //2. 把读取的内容构造成请求，发给服务器
                //注意，这里的发送是自带换行的
                printWriter.println(request);
                //3. 从服务器读取响应内容
                String response = scannerFromSocket.next();
                //4. 把响应结果显示到控制台上
                System.out.printf("请求：%s, 响应：%s \n", request, response);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
        //这里不需要close， 因为socket的生命周期跟这个进程一样长
    }

    public static void main(String[] args) throws IOException {
        TcpEchoClint clint = new TcpEchoClint("127.0.0.1", 9090);
        clint.start();
    }
}
